package com.shishuo.cdn.service;

import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

import org.springframework.stereotype.Service;

import com.shishuo.cdn.util.HttpRead;

/**2015年8月12日 17:53:12 清华接口服务类
 * @author Administrator
 *
 */
@Service
public class ApiService {
	//节点列表
private static final String nodes_address="http://1.202.135.4:2333/api/node_list/";
	//加速管理
private static final String manage_address="http://1.202.135.4:2333/api/manage/";//post "http://localhost:8080/InterfacesTest/receiveJsonData.htm";//
	//加速服务状态
private static final String status_address="http://1.202.135.4:2333/api/status/?name=";
	//已用加速空间
private static final String disk_address="http://1.202.135.4:2333/api/disk_usage/?name=";
	//资源列表 暂不用
private static final String resource_address="http://1.202.135.4:2333/api/resource_list/";

//public static void main(String[] args) {
//	System.out.println(getNodeIds());
//}
	public static String getNodes(){
		return unescapeUnicode(HttpRead.readHtmlByGet(nodes_address));
	}
	public static String[] getNodeIds(String ispsStr){
		String temp=getNodes();
		
		String[] isps=ispsStr.split(",");
		
		StringBuffer sb=new StringBuffer();
		
		JSONObject jsonObj=JSONObject.fromObject(temp);
		JSONArray jsonArray=JSONArray.fromObject(jsonObj.get("node_list"));
		for(int i=1;i<jsonArray.size();i++)
		{
			JSONObject tempJson= JSONObject.fromObject(jsonArray.get(i));
			for(int j=0;j<isps.length;j++)
			{
				String[] ispInfo=isps[j].split("_");
				if(tempJson.get("isp").toString().equals(ispInfo[ispInfo.length-1]))
					{sb.append(tempJson.get("id")+",");
					break;
					}
			}
		}
		
		
//		System.out.println();

//		JSONObject json = JSONObject.fromObject(temp);
//		json.get(node_list)
//		Matcher ma=Pattern.compile("\"id\": ([\\d]){1,3},").matcher(temp);
//		while (ma.find()) {
//			sb.append(ma.group(1)+",");
//		}
//		if("".equals(sb.toString()))
//			return n;
//		else
			return sb.toString().split(",");
			
	}
	public static String createOrModifySpace(Map<String,Object> map,String methodType){
		//String name,String action,String domain,String ip,String node
		String apiReturn="";
		try {
		Map<String, Object> params=new HashMap<String,Object>();
		params.put("name",map.get("space_name").toString());
		params.put("action",methodType);
		
		if(map.get("domain")!=null) params.put("domain",map.get("domain"));
		if(map.get("source")!=null) params.put("ip",map.get("source"));
		if(map.get("storage_limit")!=null) params.put("storage_limit",map.get("storage_limit"));
		if(map.get("dq")!=null) params.put("node",getNodeIds(map.get("dq").toString()));
		
//		System.out.println("-----------------清华-"+methodType+"---请求参数-json:-->"+JSONObject.fromObject(params).toString());
	
		apiReturn = unescapeUnicode(HttpRead.readHtmlByPostUseJson(manage_address, JSONObject.fromObject(params).toString()));
		
		JSONObject apiResult=JSONObject.fromObject(apiReturn);
		
		String resultString="-----------------清华-"+methodType+"---请求参数-json:-->"+JSONObject.fromObject(params).toString()+"    接口调用";
		
		if(apiResult.get("result").equals("accepted"))
			System.out.println(resultString+"成功  ");
		else
			System.out.println(resultString+"失败。。  api-返回内容："+apiResult.get("msg"));
		} catch (Exception e) {
			e.printStackTrace();
		}
		return apiReturn;
	}
	
	public static String  unescapeUnicode(String str){
        String temp=new String(str);
        Matcher m = Pattern.compile("\\\\u([0-9a-fA-F]{4})").matcher(str);
        while(m.find())
        	{temp=temp.replaceAll("\\\\u"+m.group(1), String.valueOf((char)Integer.parseInt(m.group(1),16)));
//        System.out.println("\\\\u"+m.group(1)+"  -  "+(char)Integer.parseInt(m.group(1),16));}
//            b.append((char)Integer.parseInt(m.group(1),16));
//        System.out.println(temp);
        	}
        return temp;
        }
//	public static void main(String[] args) {
//		Map map = new HashMap<String,Object>();
//		map.put("a", "123");
//	map.put("b", 's');
//		
//		System.out.println(JSONObject.fromObject(map));
////		System.out.println(JSONObject.fromObject("{ \"node_list\": [ { \"id\": 6, \"isp\": \"??\", \"province\": \"??\" }, { \"id\": 13, \"isp\": \"????\", \"province\": \"??\" }, { \"id\": 7, \"isp\": \"??\", \"province\": \"??\" }, { \"id\": 8, \"isp\": \"??\", \"province\": \"??\" }, { \"id\": 10, \"isp\": \"??\", \"province\": \"??\" }, { \"id\": 1, \"isp\": \"??\", \"province\": \"??\" }, { \"id\": 2, \"isp\": \"??\", \"province\": \"??\" }, { \"id\": 3, \"isp\": \"??\", \"province\": \"??\" }, { \"id\": 4, \"isp\": \"??\", \"province\": \"??\" }, { \"id\": 12, \"isp\": \"??\", \"province\": \"??\" }, { \"id\": 5, \"isp\": \"??\", \"province\": \"??\" }, { \"id\": 9, \"isp\": \"??\", \"province\": \"??\" }, { \"id\": 11, \"isp\": \"??\", \"province\": \"??\" } ] }").get("node_list"));
//	}
	
	/**
	 * YangJ 2015年8月27日 10:12:02
	 */
	public String querySpeedupStatus(String SpeedupName){
		JSONObject apiReturnJson = JSONObject.fromObject( HttpRead.readHtmlByGet(status_address+SpeedupName));
		System.out.println("清华 api 加速状态查询："+status_address+SpeedupName+"  return:"+(apiReturnJson.containsKey("result")?apiReturnJson.getString("result"):-1));
		return apiReturnJson.containsKey("result")?apiReturnJson.getString("result"):"-1";
		
//		return"-1";
	}
	
	
	/**
	 * YangJ 2015年8月27日 10:12:14 
	 */
	public String querySpeedupDiskUsed(String SpeedupName){
		JSONObject apiReturnJson = JSONObject.fromObject( HttpRead.readHtmlByGet(disk_address+SpeedupName));
		System.out.println("清华 api 已用空间查询："+disk_address+SpeedupName+"  return:"+(apiReturnJson.containsKey("disk_usage")?apiReturnJson.getString("disk_usage"):-1));
		return apiReturnJson.containsKey("disk_usage")?apiReturnJson.getString("disk_usage"):"-1";
		
//		return"-1";
	}
	
	/**   
	* 描述：   查询加速的流量使用情况
	* 创建人：YangJ  邮箱:yangjie@sxw100.com   
	* 创建时间：2015年10月10日 上午10:53:18   
	* 修改备注：   
	* @version    
	*    
	*/ 
	public String queryFlowAmountInfo(String SpeedupName){
		//.....接口调用 返回 返回值
		return"-1";
	}
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
}
